package com.ruoyi.system.support;

import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * 阿里云短信工具类
 * 封装阿里云短信API调用相关方法，提供发送短信的功能
 * 
 * @author ruoyi
 */
public class AliyunSmsUtil {
    
    /**
     * 发送短信
     * 通过阿里云短信API发送短信消息
     * 
     * @param host 阿里云短信API主机地址
     * @param path API路径
     * @param method HTTP请求方法，通常为POST
     * @param appcode 阿里云AppCode，用于API身份验证
     * @param mobile 接收短信的手机号码
     * @param smsSignId 短信签名ID，用于标识发送方
     * @param templateId 短信模板ID，定义短信格式
     * @param paramJson 模板参数JSON字符串，替换模板中的参数
     * @return 短信发送结果，成功返回API响应，失败返回错误信息
     */
    public static String sendSms(String host, String path, String method,
                                 String appcode, String mobile,
                                 String smsSignId, String templateId,
                                 String paramJson) {
        // 构建请求头，主要是鉴权信息
        Map<String, String> headers = new HashMap<>();
        headers.put("Authorization", "APPCODE " + appcode); // 设置阿里云AppCode鉴权

        // 构建查询参数，包含短信发送的必要信息
        Map<String, String> querys = new HashMap<>();
        querys.put("mobile", mobile);           // 接收手机号
        querys.put("param", paramJson);         // 模板参数，通常包含验证码等信息
        querys.put("smsSignId", smsSignId);     // 短信签名
        querys.put("templateId", templateId);   // 短信模板
        
        try {
            // 调用HTTP工具发送POST请求
            HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, new HashMap<>());
            // 将响应内容转换为字符串并返回
            return EntityUtils.toString(response.getEntity(), "UTF-8");
        } catch (Exception e) {
            // 异常处理，返回错误信息
            return "ERROR: " + e.getMessage();
        }
    }
}


